package com.ruoyi.system.media;

/**
 * CPC卡CPC卡过站信息文件(DF/EF02)的编码信息
 */
public class CpcEf02EdModel {
    public static final int MSG_LEN = 101;

    /**
     * 通行省份个数(01-01,1,n)
     * 入口车道置1，经过省界入口ETC门架时累加
     */
    public byte[] nProvSum = new byte[1];

    /**
     * 本省门架个数(02-02,1,n)即当前通行省份内所有途径ETC门架个数
     */
    public byte[] nGanySum = new byte[1];

    /**
     * 本省累计金额(03-05,3,n)当前通行省份内所有途径ETC门架（ 含拟合门架）的累计计费金额
     */
    public byte[] cLoclTol = new byte[3];

    /**
     * 本省计费里程(06-08,3,n)当前通行省份内所有途径ETC门架（ 含拟合） 对应的累计计费里程， 单位米
     */
    public byte[] cMileSum = new byte[3];

    /**
     * 本省入口ETC门架信息(09-11,3,bn)
     * 省界入口ETC门架或省内第一个ETC门架的信息<br>
     * 3字节ETC门架编码 ，入口收费站3字节ETC门架编码填入0x00
     */
    public byte[] cEntyHex = new byte[3];

    /**
     * 本省入口时间(12-15,4,n)UNIX时间
     */
    public byte[] cEntyTms = new byte[4];

    /**
     * 最新过门架编码(16-18,3,bn)
     */
    public byte[] cNewsGay = new byte[3];

    /**
     * 最新过门架时间(19-22,4,n) UNIX时间
     */
    public byte[] cNewsTms = new byte[4];

    /**
     * 最新过门架计费金额(23-25,3,n)
     */
    public byte[] cNewsTol = new byte[3];

    /**
     * 最新过门架计费里程(26-28,3,n)
     */
    public byte[] cNewsLng = new byte[3];

    /**
     * 过站信息中写入的门架数量(29-29,1,n)
     */
    public byte[] nStanSum = new byte[1];

    /**
     * 过站门架HEXS(30-101,72,bn)
     * 3字节门架编号,共计可记录24个门架
     */
    public byte[][] cStanDat = new byte[24][3];

    /**
     * 信息编码
     *
     * @param dd
     * @return
     */
    public static CpcEf02EdModel encoded(CpcEf02Model dd) {
        CpcEf02EdModel ed = new CpcEf02EdModel();
        ed.nProvSum = ZTools.int2bin(1, dd.nProvSum);
        ed.nGanySum = ZTools.int2bin(1, dd.nGanySum);
        ed.cLoclTol = ZTools.int2bin(3, dd.cLoclTol);
        ed.cMileSum = ZTools.int2bin(3, dd.cMileSum);
        ed.cEntyHex = ZTools.hex2bin(3, dd.cEntyHex);
        ed.cEntyTms = ZTools.int2bin(4, dd.cEntyTms);
        ed.cNewsGay = ZTools.hex2bin(3, dd.cNewsGay);
        ed.cNewsTms = ZTools.int2bin(4, dd.cNewsTms);
        ed.cNewsTol = ZTools.int2bin(3, dd.cNewsTol);
        ed.cNewsLng = ZTools.int2bin(3, dd.cNewsLng);
        ed.nStanSum = ZTools.int2bin(1, dd.nStanSum);

        for (int aa = 0; aa < dd.nStanSum && aa < dd.cStanDat.length; aa++) {
            if (dd.cStanDat[aa].isEmpty()) dd.cStanDat[aa] = "000000";
            ed.cStanDat[aa] = ZTools.hex2bin(3, dd.cStanDat[aa]);
        }

        return ed;
    }

    public byte[] toBytes() {
        byte[] ret = ZTools.sbMerger(nProvSum, nGanySum, cLoclTol, cMileSum, cEntyHex, cEntyTms, cNewsGay, cNewsTms, cNewsTol, cNewsLng, nStanSum, ZTools.twz2oneBytes(cStanDat));
        return ret;
    }

    public String toHexStr() {
        return ZTools.bin2hex(toBytes());
    }
}
